Most modern computer systems communicate with hardware devices such as peripherals and processing units such as programmable logic controllers (PLCs), which typically are external to the computer systems and possibly in remote locations. The computer systems in particular include network interface devices, by which the computer systems are coupled to computer networks or buses that in turn are coupled to the hardware devices. A variety of networks are possible including, for example, Peripheral Component Interconnect (PCI) buses or Universal Serial Buses (USBs), and the network interface devices can take the form of PCI cards or other forms.
In implementing such network interface devices, many modern computer systems use software routines, called “device drivers”, which are loaded onto the operating systems of the computer systems to achieve and facilitate communications over the networks. Typically, for each respective network coupled to a computer system, a respective monolithic device driver is loaded onto the appropriate network interface device at boot time, often with information about the hardware devices that are connected to (or intended to be connected to) that network. The loading of the device drivers by the operating system at boot time includes the loading of protocol information specifying functions that each of those device drivers can perform.
In such conventional schemes, the assignment of the respective monolithic device drivers to the respective network interface devices of a computer system is rigidly fixed by the operating system when it is loaded onto the computer system at boot time. After loading is complete, the operating system then communicates with each of the device drivers on the computer system by way of the same generic commands. The various device drivers on a given computer system are designed to be self-sufficient and capable of operating independently of one another. Typically, each device driver is responsible for interfacing between the operating system and the network interface device on which it is loaded, both in terms of functional tasks and hardware operation.
Although such conventional arrangements do operate successfully, the rigid allocation of multiple self-sufficient and independent device drivers in such conventional arrangements can be undesirable for several reasons. First, the needs of the users accessing a computer system, as well as the characteristics of the computer system itself and the networks and hardware devices coupled to the computer system, can change over time. Consequently, an assignment of device drivers that may be appropriate and efficient at a given time may no longer be appropriate and efficient at a later time. However, to change the assignment of device drivers may be inconvenient insofar as it requires rebooting of the computer system.
Additionally, because such device drivers tend to be responsible for a wide variety of operations of the network interface devices on which the device drivers are implemented, including communications-related functionality as well as hardware control (e.g., power management of the network interface devices), the device drivers tend to be complicated programs. Not only does this complexity increase the cost of developing such device drivers, but also it increases the overall amount of memory required to store such device drivers as well as the time required to load such device drivers onto operating systems at boot time. Also, the independence of the device drivers is largely/entirely incompatible with their coordination.
Further, as operating systems evolve in particular, device drivers designed for implementation on network interface devices in relation to particular operating systems may no longer be compatible with newer operating systems or versions of operating systems. For example, while earlier versions of Microsoft Windows operating systems available from the Microsoft Corporation of Redmond, Wash. (e.g., Microsoft Windows XP) are capable of operating with device drivers that do not support “Plug and Play” (PnP) operation, the newly-released Microsoft Windows Vista operating system only is capable of operation with device drivers that support PnP operation.
For at least these reasons, therefore, it would be advantageous if an improved computer system and/or method of operating a computer system could be developed that enabled network-based communications in a manner that avoided at least to some extent one or more of the above-described disadvantages associated with conventional arrangements. More particularly, it would be advantageous if such an improved system and/or method in at least some embodiments was more flexible in terms of allowing repeated adjustments to device drivers, involved the use of device drivers of reduced complexity, and/or was more easily adaptable so as to achieve compatibility with multiple types of operating systems, relative to conventional arrangements.